﻿#region License
/* Copyright (C) 2009 Tim Coulter
 * 
 * This file is part of ExtremeML.
 * 
 * ExtremeML is free software: you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation either version
 * 2 of the License, or (at your option) any later version.
 * 
 * ExtremeML is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty
 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
 * the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see http://www.gnu.org/licenses/.
*/
#endregion

using System.IO;
using System.Reflection;

namespace ExtremeML.Tests
{
	public class Utility
	{
		public const string EmptyWorkbookTemplateResource = @"ExtremeML.Tests.Resources.Empty Workbook.xlsx";
		public const string TableSamplesTemplateResource = @"ExtremeML.Tests.Resources.Table Samples.xlsx";
		public const string FormulaSamplesTemplateResource = @"ExtremeML.Tests.Resources.Formula Samples.xlsx";
		public const string StyleSamplesTemplateResource = @"ExtremeML.Tests.Resources.Style Samples.xlsx";

		/// <summary>
		/// Copies the specified resource to a temporary file and returns its path.
		/// </summary>
		public static string CreateFileFromResource(
			string resourcePath)
		{
			var filePath = Path.GetTempFileName();
			CreateFileFromResource(resourcePath, filePath);
			return filePath;
		}

		/// <summary>
		/// Copies the specified resource to the specified path.
		/// </summary>
		public static void CreateFileFromResource(
			string resourcePath,
			string filePath)
		{
			var data = new byte[4096];

			using (var inStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourcePath))
			using (var outStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
			{
				int bytes;

				do
				{
					bytes = inStream.Read(data, 0, 4096);
					outStream.Write(data, 0, bytes);
				} while (bytes > 0);
			}
		}

		/// <summary>
		/// Returns a temporary file path to for use in creating a new package.
		/// </summary>
		public static string GetTemporaryFilePath()
		{
			return Path.GetTempFileName();
		}
	}
}
